package com.yuyan.openapi.controller;

import com.alibaba.fastjson2.JSONObject;
import com.yuyan.openapi.rest.YuyanRestUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * 钱包相关接口
 *
 * @author xm
 * @date 2024/4/9
 **/
@RestController
public class WalletController {
    @Autowired
    private YuyanRestUtil yuyanRestUtil;
    @Value("${yuyan.mc_no}")
    public String mc_no;
    @Value("${yuyan.withdraw_callback}")
    public String withdraw_callback;
    @Value("${yuyan.recharge_callback}")
    public String recharge_callback;
    private final String requestNo = "2024011400001";

    /**
     * 注册个人钱包
     *
     * @return
     */
    @GetMapping("walletRegister")
    public Object walletRegister() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", requestNo);
        requestMap.put("name", "xxx");
        requestMap.put("mobile", "xxx");
        requestMap.put("cardNo", "xxx");
//        requestMap.put("cardOneImgCode", "F202404108020000007");
//        requestMap.put("cardTwoImgCode", "F202404101500000008");
        requestMap.put("remark", "社交电商分销用户001");
        requestMap.put("bankAccountNo", "");
        requestMap.put("payType", "4");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/register");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    /**
     * 个人钱包上传身份证照片
     *
     * @return
     */
    @GetMapping("walletUpload")
    public Object walletUpload() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", requestNo);
        requestMap.put("walletNo", "");
        requestMap.put("cardOneImgCode", "");
        requestMap.put("cardTwoImgCode", "");

        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/upload");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    /**
     * 查询个人钱包信息
     *
     * @return
     */
    @GetMapping("walletInfo")
    public Object walletInfo() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("walletNo", "");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/info");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }


    /**
     * 个人钱包绑卡
     *
     * @return
     */
    @GetMapping("walletCardBd")
    public Object walletCardBd() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("walletNo", "");
        requestMap.put("bindFunction", "");
        requestMap.put("bankAccountNo", "xx");
        requestMap.put("bankMobile", "xx");
        requestMap.put("validTime", ""); // 格式YYYY-MM-DD
        requestMap.put("cvv", "");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletCardBd");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }


    /**
     * 个人钱包绑卡信息查询
     *
     * @return
     */
    @GetMapping("walletCardInfo")
    public Object walletCardInfo() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("cardNo", "");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletCardInfo");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }


    /**
     * 个人钱包绑卡重新发送验证码
     *
     * @return
     */
    @GetMapping("walletCardResetCode")
    public Object walletCardResetCode() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("cardNo", "");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletCardResetCode");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }


    /**
     * 个人钱包绑卡确认
     *
     * @return
     */
    @GetMapping("walletCardConfirm")
    public Object walletCardConfirm() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("cardNo", "");
        requestMap.put("smsCode", "");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletCardConfirm");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    /**
     * 个人钱包绑卡解绑
     *
     * @return
     */
    @GetMapping("walletCardUbd")
    public Object walletCardUbd() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("cardNo", "");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletCardUbd");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    /**
     * 个人钱包查询余额
     *
     * @return
     */
    @GetMapping("walletBalance")
    public Object walletBalance() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("walletNo", "");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletBalance");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }


    /**
     * 商户钱包查询余额
     *
     * @return
     */
    @GetMapping("mcBalance")
    public Object mcBalance() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("payType", "4");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/mcBalance");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    /**
     * 商户钱包提现
     *
     * @return
     */
    @GetMapping("mcWithdraw")
    public Object mcWithdraw() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("payType", "4");
        requestMap.put("accountType", "1");
        requestMap.put("amount", "");
        requestMap.put("remark", "");
        requestMap.put("notifyUrl", "");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/mcWithdraw");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    /**
     * 个人钱包提现
     *
     * @return
     */
    @GetMapping("walletWithdraw")
    public Object walletWithdraw() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("walletNo", "");
        requestMap.put("cardNo", "");
        requestMap.put("amount", "");
        requestMap.put("remark", "");
        requestMap.put("notifyUrl", withdraw_callback);
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletWithdraw");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    /**
     * 钱包提现信息查询
     *
     * @return
     */
    @GetMapping("walletWithdrawInfo")
    public Object walletWithdrawInfo() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("withdrawNo", "");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletWithdrawInfo");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }


    /**
     * 钱包提现重新发送短信验证码
     *
     * @return
     */
    @GetMapping("withdrawResetCode")
    public Object withdrawResetCode() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("withdrawNo", "");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/withdrawResetCode");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    /**
     * 钱包提现确认
     *
     * @return
     */
    @GetMapping("walletWithdrawConfirm")
    public Object walletWithdrawConfirm() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("withdrawNo", "");
        requestMap.put("smsCode", "");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletWithdrawConfirm");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }


    /**
     * 个人钱包余额充值
     *
     * @return
     */
    @GetMapping("walletRecharge")
    public Object walletRecharge() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("walletNo", "SDYYW2024032300000001");
        requestMap.put("cardNo", "202404270000002");
        requestMap.put("amount", "0.01");
        requestMap.put("remark", "测试api充值");
        requestMap.put("notifyUrl", recharge_callback);
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletRecharge");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    /**
     * 个人钱包余额充值信息查询
     *
     * @return
     */
    @GetMapping("walletRechargeInfo")
    public Object walletRechargeInfo() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("rechargeNo", "REC202404281000003");

        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletRechargeInfo");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    /**
     * 个人钱包余额重发短信
     *
     * @return
     */
    @GetMapping("walletRechargeResetCode")
    public Object walletRechargeResetCode() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("rechargeNo", "REC202404281000003");

        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletRechargeResetCode");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    /**
     * 个人钱包余额充值确认
     *
     * @return
     */
    @GetMapping("walletRechargeConfirm")
    public Object walletRechargeConfirm() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("requestNo", System.currentTimeMillis() / 1000);
        requestMap.put("rechargeNo", "REC202404281000003");
        requestMap.put("smsCode", "249737");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletRechargeConfirm");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    /**
     * 个人钱包余额支付下单
     *
     * @return
     */
    @GetMapping("walletPay")
    public Object walletPay() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("orderNo", System.currentTimeMillis() / 1000);
        requestMap.put("walletNo", "SDYYW2024032300000001");
        requestMap.put("amount", "0.01");
        requestMap.put("remark", "测试余额支付给平台");
        requestMap.put("goodsName", "测试余额支付给平台");
        requestMap.put("payTimeLimit", "2024-04-29 00:00:00");
        requestMap.put("payerIp", "");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletPay");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    /**
     * 个人钱包余额支付下单重发短信
     *
     * @return
     */
    @GetMapping("walletPayResetCode")
    public Object walletPayResetCode() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("orderNo", System.currentTimeMillis() / 1000);
        requestMap.put("tradeNo", "SDYY2024042810003727");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletPayResetCode");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    /**
     * 个人钱包余额支付下单确认支付
     *
     * @return
     */
    @GetMapping("walletPayConfirm")
    public Object walletPayConfirm() {
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("mcNo", mc_no);
        requestMap.put("orderNo", System.currentTimeMillis() / 1000);
        requestMap.put("tradeNo", "SDYY2024042810003727");
        requestMap.put("smsCode", "213085");
        try {
            JSONObject jsonObject = yuyanRestUtil.post(requestMap, "/v1/wallet/walletPayConfirm");

            if (!"Y000".equals(jsonObject.getString("code"))) {
                // todo 这是网关非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("msg"));
            }

            if (!"S000".equals(jsonObject.getString("subCode"))) {
                // todo 这是业务非成功的返回，做一些逻辑处理，具体状态码可查看文档
                throw new RuntimeException(jsonObject.getString("subMsg"));
            }

            // todo 拿到业务数据，继续业务处理即可，例如保存单号，然后返回给前端唤起支付等
            jsonObject.put("data", jsonObject.getJSONObject("data"));
            return jsonObject;
        } catch (Exception e) {
            return e.getMessage();
        }
    }


}
